
package com.mdp.workflow.api;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.mdp.workflow.biz.re.vo.ModelVo;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.engine.repository.Model;

import java.util.Collection;
import java.util.List;
import java.util.Map;

public interface FlowModelService {
  /**
   * 启动流程时需要加载的数据太多，做缓存处理，当流程重新发布才会清空，或者等待过时自动清空
   */
  static String START_PROC_PRE_CACHE_KEY="START_PROC_PRE_";

  /**
   * 创建流程模型
   * @param modelVo BPMN XML
   * @return 创建的流程模型的编号
   */
  String createModel(ModelVo modelVo);

  /**
   * 获得流程模块
   *
   * @param id 编号
   * @return 流程模型
   */
  Model getModel(String id);

  /**
   * 获得流程模块
   *
   * @param modelKey key
   * @return 流程模型
   */
  Model getModelByKey(String modelKey);

  /**
   * 获得流程模型的 BPMN XML
   *
   * @param id 编号
   * @return BPMN XML
   */
  byte[] getModelBpmnXML(String id);

  /**
   * 修改流程模型
   *
   * @param modelVo 更新信息
   */
  void updateModel(ModelVo modelVo);

  /**
   * 将流程模型，部署成一个流程定义
   *
   * @param id 编号
   */
  void deployModel(String id);

  /**
   * 删除模型
   *
   * @param id 编号
   */
  void deleteModel(String id);

  /**
   * 修改模型的状态，实际更新的部署的流程定义的状态
   *
   * @param id    编号
   * @param state 状态
   */
  void updateModelState(String id, String state);

  /**
   * 获得流程定义编号对应的 BPMN Model
   *
   * @param processDefinitionId 流程定义编号
   * @return BPMN Model
   */
  BpmnModel getBpmnModelByDefinitionId(String processDefinitionId);


  List<Map<String, Object>> selectListMapByWhere(IPage page, QueryWrapper qw, Map<String, Object> params);

  void removeByIds(Collection<String> ids);

  void clearCache(String key);

}
